/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package test.net.sourceforge.pmd.cpd;
import junit.framework.TestCase;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.cpd.JavaTokenizer;
import net.sourceforge.pmd.cpd.Match;
import net.sourceforge.pmd.cpd.MatchAlgorithm;
import net.sourceforge.pmd.cpd.SourceCode;
import net.sourceforge.pmd.cpd.TokenEntry;
import net.sourceforge.pmd.cpd.Tokens;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MatchAlgorithmTest extends TestCase {
public static final String LINE_1 = "public class Foo { ";
public static final String LINE_2 = " public void bar() {";
public static final String LINE_3 = " System.out.println(\"hello\");";
public static final String LINE_4 = " System.out.println(\"hello\");";
public static final String LINE_5 = " }";
public static final String LINE_6 = "}";
public static String getSampleCode() {
return
LINE_1 + PMD.EOL +
LINE_2 + PMD.EOL +
LINE_3 + PMD.EOL +
LINE_4 + PMD.EOL +
LINE_5 + PMD.EOL +
LINE_6;
}
public void testSimple() throws Throwable {
String code = getSampleCode();
JavaTokenizer tokenizer = new JavaTokenizer();
SourceCode sourceCode = new SourceCode("Foo.java");
Tokens tokens = new Tokens();
TokenEntry.clearImages();
sourceCode.readSource(new StringReader(code));
tokenizer.tokenize(sourceCode, tokens);
assertEquals(29, tokens.size());
Map codeMap = new HashMap();
codeMap.put("Foo.java", sourceCode);
MatchAlgorithm matchAlgorithm = new MatchAlgorithm(codeMap, tokens, 5);
matchAlgorithm.findMatches();
Iterator matches = matchAlgorithm.matches();
Match match = (Match)matches.next();
assertFalse(matches.hasNext());
Iterator marks = match.iterator();
TokenEntry mark1 = (TokenEntry)marks.next();
TokenEntry mark2 = (TokenEntry)marks.next();
assertTrue(!marks.hasNext());
assertEquals(3, mark1.getBeginLine());
assertEquals(4, mark2.getBeginLine());
assertTrue("Foo.java" == mark1.getTokenSrcID() && "Foo.java" == mark2.getTokenSrcID());
assertEquals(LINE_3, match.getSourceCodeSlice());
}
}